Coleco makes no representations or warranties whatsoever, including without limitation any implied warranties of merchantability and fitness for a particular purpose, in connection with the materials contained herein, and such materials are disclosed as is. Coleco shall have no liability for any losses caused to recipients of these materials by reason of any changes or modifications made by Coleco in these materials after their disclosure herein, in addition, Coleco shall have no liability for any consequential, special, indirect or incidental damages or losses whatsoever, including loss of profits, in connection with the use of the materials disclosed herein.
© 1984 Coleco Industries, Inc.
All rights reserved
ADAMTM, SmartBasicTM, SmartWRITERTM, and AdamNETTM are trademarks of Coleco Industries, Inc. ColecoVision® is a registered trademark of Coleco Industries, Inc. Buck RogersTM indicates a trademark of the Dillie Family Trust © 1982 The Dille Family Trust. Planet of ZoomTM and SEGA® are trademarks of SEGA Enterprises, Inc. © 1982 SEGA Enterprises, Inc.
Editor: | Maria Higgini |
Technical Consultants: | Brian Taylor David K. Hwang Robert Jepson |
Cover Design: | Laura Shea |
COLECO MAKES NO REPRESENTATIONS OR WARRANTIES WHATSOEVER, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, IN CONNECTION WITH THE MATERIALS CONTAINED HEREIN, AND SUCH MATERIALS ARE DISCLOSED AS IS. COLECO SHALL HAVE NO LIABILITY FOR ANY LOSSES CAUSED TO RECIPIENTS OF THESE MATERIALS BY REASON OF ANY CHANGES OR MODIFICATIONS MADE BY COLECO IN THESE MATERIALS AFTER THEIR DISCLOSURE HEREIN. IN ADDITION, COLECO SHALL HAVE NO LIABILITY FOR ANY CONSEQUENTIAL, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES OR LOSSES WHATSOEVER, INCLUDING LOSS OF PROFITS, IN CONNECTION WITH THE USE OF THE MATERIALS DISCLOSED HEREIN.
© 1984 Coleco Industries, Inc.
All rights reserved
ADAMTM, SmartBasicTM, SmartWRITERTM, and AdamNETTM are trademarks of Coleco Industries, Inc. ColecoVision® is a registered trademark of Coleco Industries, Inc. Buck RogersTM indicates a trademark of the Dillie Family Trust © 1982 The Dille Family Trust. Planet of ZoomTM and SEGA® are trademarks of SEGA Enterprises, Inc. © 1982 SEGA Enterprises, Inc.
The ADAM Family Computers System Technical Reference Manual is a source of technical information for both hardware and software designers. This preliminary release of the manual includes the most essential information.
Section I, Functional Description, covers all the function blocks of the system. Included are the essentials for understanding the hardware architecture and information on each of ADAM's software components.
Section II, EOS User's Manual, supplies the necessary information for using the Elementary Operating System.
Section III, Optional Peripherals, contains notes about the differences between the disk drive and the tape drive and source listings for the AdamLink MODEM.
Section IV, EOS_6 Absolute Listings, supplies listings for Elementary Operating System.
Section V, OS_7 Absolute Listings, supplies listings for OS_7 code.
Section I: Functional Description Chapter 1: General Introduction 1. Hardware Overview Fig. 1-3 ADAM Software Architecture Fig. 2-1 System Block Diagram 2.1 The Memory and I/O Printed Circuit Board Fig. 2-3 Memory and I/O Board Block Diagram 2.1.2 Master 6801 Microcomputer 2.1.7a Connector #1 Table 1: DC Characteristics 2.1.9a Memory and I/O Board/CPU Board Table 3: Cartridge Interface Parameters Fig. 2-4 Block Diagram: CPU Board 2.2.2 Z80 Microprocessor 2.3 Data Pack Drive 2.3.1 Theory of Operation 2.4 Differences of Expansion Module 3 3. The Keyboard 3.1 Theory of Operation 4. The Printer 4.1 Theory of Operation 5. Game Controllers Fig. 2-5 Game Controller Configuration 6. Power Supply 6.1 Power Supply Voltage Chapter 3: Software 1. Introduction 2.1 Lower Memory Options |
3. AdamNet 3.1 Introduction Fig. 3-1 Bus Network 3.2 Logical Design 4. Operating System 4.1 EOS Fig. 3-4 EOS Memory Map 5. Tape Format and Other Tape Considerations 5.1 Considerations in Choosing Tape Format 6. SmartWRITER 6.1 Memory Map 7. SmartBASIC Chapter 4: [unknown; not present] Chapter 5: Development Tools and Utilities 1. Super Games 1.1 Background Loading 1.3.1 Overlay Control Blocks 1.4 Start of Game 1.6.1 Tape Manager Program 1.7 Background Loading Software Appendix 1. Keyboard Table 3.1 Deferral 4. Schematics and Component Location/Identification 4.1 Memory and I/O Board 4.1.1 Memory and I/O Board Schematic, Sheet 1 4.2 CPU Board 4.2.1 CPU Board Schematic 4.3 Interconnect Board 4.3.1 Interconnect Board Schematic 4.4 Linear Power Supply 4.4.1 Linear Power Supply Schematic Section II: EOS User's Manual Section III: Optional Peripherals Section IV: EOS-6 Absolute Listings Section V: OS-7 Absolute Listings |
The ADAM Family Computer System consists of three major components: the memory console, the keyboard, and the printer. The consumer provides his own TV or monitor. Other equipment provided with the system are two "joystick" game controllers, various cords and cables to connect the components, and an antenna switch box.
The memory console houses the main memory and the CPU of the system, and one data pack drive. Space and connectors are provided for another drive. Two printed circuit boards contain 64K RAM, 16K video RAM, and expansion port, two AdamNet ports, three card connectors and a cartridge slot. Two additional printed circuit boards control the drives.
The system reads from and stores on digital data packs. Digital data packs are a reel to reel magnetic tape encased in a LexanTM cassette, Each data pack can store up to 256K bytes.
The keyboard has 75 full travel keys, including ten command keys and six programmable function keys. A "power on" LED indicator on the right side of the keyboard shows when the system is on. The keyboard contains one printed circuit board.
The printer is a letter-quality, bi-directional, daisy wheel printer. Paper feeds into the printer through a friction-feed mechanism that accommodates single sheets of paper up to 9-1/2 inches wide. With the addition of an optional tractor-feed mechanism, the printer also accommodates continuous, "fan-fold" paper. Pitch is 10 characters to the inch, and printing speed is 10 characters per second. The printer contains two printed circuit boards, one for the printer and one for the power supply.
The computer's power supply, which produces 4 regulated DC voltages, is housed in the printer.
ADAM is available in two models, the complete system and Expansion Module #3. When the memory console of Expansion Module #3 is connected to ColecoVision, the two models are essentially identical in function.
The block diagram in Figure 2-1 represents a high-level view of the system's hardware design. The major elements in the block diagram are discussed in greater detail in Chapter 2, Hardware.
ADAM's hardware components are linked together by a 62.5K bps, half-duplex, shared serial bus, known as AdamNet.
EOS (Elementary Operating System) is a collection of service routines that provides input and output facilities to peripheral devices, in such a way that the application programs need not address the physical characteristics of the peripherals or the operation of AdamNet. EOS also provides file management for manipulating data on mass storage devices.
OS-7 is a run-time user's library of software modules that control graphics, sound, timing, etc. EOS contains many modules equivalent to OS-7 modules, but some have different inputs and outputs.
ADAM contains a ROM-based electric typewriter/word processor/editor called SmartWRITER. SmartBASIC and the Buck RogersTM Planet of ZoomTM Super Game are included with Adam on data packs.
Each of ADAM's software components is discussed in greater detail in Chapter 3. Figure 1-3 depicts Adam's software architecture.
[FIGURE 1-3: ADAM SOFTWARE ARCHITECTURE]
This chapter presents technical information on each of the major logical components of ADAM identified in the System Block Diagram, Figure 2-1. The Appendix contains schematics and component location/identification drawings.
For the convenience of hardware developers, pin and signal connections for all expansion connectors are given. The Memory Console provides a total of four expansion connectors. Three female card edge connectors are accessed by removing the top cover of the Memory Console. These are referred to as expansion connectors #1, #2, and #3. One male card edge connector extends from the right side of the Memory Console. This is referred to as the Expansion Port.
[FIGURE 2-1: SYSTEM BLOCK DIAGRAM]
[FIGURE 2-2: SYSTEM FLOW DIAGRAM]
The Memory and I/O Board contains the 6801 Master microcomputer, 72K bytes of RAM and provisions for up to 72 K of ROM/EPROM. This board provides the circuitry required to interface the keyboard, printer, tape drive, and future options. Three card-edgem connectors profice access for future options. An expansion port provides access for external peripherals. A custom LSI circuit, the Memory Input Output Controller (MIOC), interfaces the 6801 Master microcomputer with the Z80 microprocessor on the CPU Board. Another 6801 microcomputer on the Memory and I/O Board controls the operation of the tape drive interface circuitry.
[FIGURE 2-3: THE MEMORY AND I/O BOARD BLOCK DIAGRAM]
The Master 6801 microcomputer's primary function is to control system access to the keyboard, printer, tape drive, and future peripherals. The Master 6801 microcomputer is a front-end network processor that supports the Z80. The Master 6801 communicates with the Z80 via the Memory Input Output Controller. The Master 6801 reads and writes information to and from network peripherals on command by the Z80.
The 6801 chip provides 2048 bytes of ROM, 128 bytes of RAM, and a UART. The Master 6801 is configured for single chip mode operation and runs, as do Adam's other 6801s, at a 1 MHz rate. This frequency is derived from an external 4 MHz crystal and the 6801's internal divide-by-4 circuitry.
The Memory Input Output Controller is a 40-pin IC that interfaces two dissimilar microprocessors (the Z80 and the Master 6801) by performing the proper decoding and timing functions. It is responsible for selecting the memory configuration (Refer to Chapter 3, Section 2). The MIOC has 22 input signals, 16 output signals, power, and ground.
Room is provided on the Memory and I/O Board for up to 40K of ROM. ROM selection is controlled by a decoder circuit which is driven by A13, /BOOTROMCS and /EOS_ENABLE. The Memory and I/O Board ROM circuit contains EOS (Elementary Operating System) software.
The dynamic RAM circuit consists of eight 64K RAM chips arranged so that each represents one specific data bus bit. Information written to or read from RAM is controlled by the /BWR, /RAS, and /CAS1 signals. The latched Z80 address bus BA0-BA15 (or BA0-BA6, RA7, BA8-BA15) is provided along with MUX from the MIOC to the two data selector multipexer, which provide MA0-MA7 (or RA7) to the DRAM address bus. Z80 provides a 7-bit refresh address after each instruction fetch. The MIOC generates an eighth bit for 256-refresh cycle dynamic RAMs. See Appendix 2, Adam Emulation Considerations, for further information.
A quad comparator circuit provides data to and from the Master 6801 microcomputer via a half-duplex 62.5 kilobaud serial network called AdamNET. The comparator can also reset all the devices on AdamNET via MIOC control. AdamNET links the tape drive, printer, and keyboard to the Master 6801. Each of these peripherals has a 6801 and a quad comparator circuit that controls AdamNET. Besides the data signal and reset signal, ground and power are provided as part of the AdamNET bus.
Three card edge connectors are provided for future development. Refer to Subsection 2.1.9 for pin connections.
This connector is soldered to the Memory and I/O Board, and is labelled J7.
This connector is designed for expansion ROM and I/O devices and is soldered to the Memory and I/O Board. It is labelled J6.
This connector allows for expansion RAM and/or ROM up to 64K bytes, and is labelled J5.
The expansion port is connected to the Memory and I/O Board at P1.
Pin | Type | Refer To Table | Pin | Type | Refer To Table |
---|---|---|---|---|---|
1 | Ground | 31 | Audio input | ||
2 | Ground | 32 | Video input enable +9 VDC | ||
3 | BD3 Tristate, I/O | 1, 2 | 33 | NTSC composite video input, 6 VDC, 1.5 VAC | |
4 | BA14 Tristate output | 1, 2 | 34 | /GAME_MODE_RESET output | |
5 | Y2 LS138 decoder output | 35 | Sound chip 76489 disable, 0 VDC | ||
6 | Y1 LS138 decoder output | 36 | Not in use | ||
7 | /HALT input | 1, 2 | 37 | BA11 Tristate output | 1, 2 |
8 | /BWR Tristate output | 1, 2 | 38 | BA12 Tristate output | 1, 2 |
9 | /NMI input/output | 1 | 39 | VDP Sync/Reset input | 1 |
10 | /SPINNER_INT_DISABLE input | 1 | 40 | /BIORQ Tristate output | |
11 | /BUSRQ input | 1 | 41 | Not used | |
12 | BD1 Tristate, I/O | 1, 2 | 42 | Not used | 1 |
13 | /Z80_RESET input | 1, 2 | 43 | BA15 Tristate output | 1, 2 |
14 | BD0 Tristate, I/O | 1, 2 | 44 | BA3 Tristate output | 1, 2 |
15 | /BM1 Tristate output | 1, 2 | 45 | BF 3.58 MHz clock | |
16 | BD7 Tristate, I/O | 1, 2 | 46 | BD2 Tristate, I/O | 1, 2 |
17 | BD6 Tristate, I/O | 1, 2 | 47 | BA0 Tristate output | 1, 2 |
18 | BA1 Tristate output | 1, 2 | 48 | BD5 Tristate, I/O | 1, 2 |
19 | BD4 Tristate, I/O | 1, 2 | 49 | /BRFSH Tristate output | |
20 | BA2 Tristate output | 1, 2 | 50 | /WAIT input | 1, 2 |
21 | BA4 Tristate output | 1, 2 | 51 | /INT input | 1, 2 |
22 | BA13 Tristate output | 1, 2 | 52 | /BUSAK output | 1, 2 |
23 | BA5 Tristate output | 1, 2 | 53 | /BRD Tristate output | 1, 2 |
24 | BA6 Tristate output | 1, 2 | 54 | /BMREQ Tristate output | 1 |
25 | BA7 Tristate output | 1, 2 | 55 | /IORQ output | 1,2 |
26 | BA8 Tristate output | 1, 2 | 56 | AUDIO 76489 RDY output | |
27 | BA9 Tristate output | 1, 2 | 57 | +12V | |
28 | BA10 Tristate output | 1, 2 | 58 | +5V | |
29 | /AUX_DECODE_1 input | 1 | 59 | +5V | |
30 | /AUX_DECODE_2 input | 1 | 60 | -5V |
/X - Denotes active low
TABLE 1: DC CHARACTERISTICS
Symbol | Parameter | Min | Typ | Max | Units | Test Conditions |
---|---|---|---|---|---|---|
VIL | Input low voltage | -0.3 | 0.8 | V | ||
VIH | Input high voltage | 2.0 | Vcc | V | ||
VOL | Output low voltage | 0.4 | V | IOL = 1.8 mA | ||
VOH | Output high voltage | 2.4 | V | IOH = 250 µA | ||
ILI | Input leakage current | ±10 | µA | VIN = 0 to Vcc | ||
ILO | Tri-state output Leakage current in float | ±10 | µA | VOUT = 0.4 V to Vcc |
TABLE 2: TIMING REFERENCE TABLE
[ ]* See notes at end of table
SIGNAL | SYMBOL | PARAMETER | MIN (ns) | MAX (ns) |
---|---|---|---|---|
A0-15 |
tD(AD) tF(AD) tacm taci tca tcaf |
Address output delay Delay to float Address stable prior to /MREQ (memory cycle) Address stable prior to /IORQ, /RD, or /WR (I/O cycle) Address stable from /RD, /WR, /IORQ, or /MREQ Address stable from /RD or /WR during float |
--- --- [1]* [2]*[3]* [4]* |
110 90 --- --- --- --- |
D0-7 |
tD(D) tF(D) tSF(D) tSF(D) tdcm tdci tdcf tH |
Data output delay Delay to float during write cycle Data setup time to rising edge of clock during M1 cycle Data setup time to falling edge at clock during M2 to M5 Data stable prior to /WR (memory cycle) Data stable prior to /WR (I/O cycle) Data stable from /WR Input hold time |
--- --- 35 50 [5]* [6]* [7]* 0 |
150 90 --- --- --- --- --- --- |
/MREQ |
tDLF(MR) tDHF(MR) tDHF(MR) tw(/MRL) tw(/MRH) |
/MREQ delay from falling edge of clock, /MREQ low /MREQ delay from rising edge of clock, /MREQ high /MREQ delay from falling edge of clock, /MREQ high Pulse width, /MREQ low Pulse width, /MREQ high |
20 --- --- [8]* [9]* |
85 85 85 --- --- |
/IORQ |
tDLF(IR) tDLF(IR) tDHF(IR) tDHF(IR) |
/IORQ delay from rising edge of clock, /IORQ low /IORQ delay from falling edge of clock, /IORQ low /IORQ delay from rising edge of clock, /IORQ high /IORQ delay from falling edge of clock, /IORQ high |
--- --- --- --- |
75 85 85 85 |
/RD |
tDLF(RD) tDLF(RD) tDHF(RD) tDHF(RD) |
/RD delay from rising edge of clock, /RD low /RD delay from falling edge of clock, /RD low /RD delay from rising edge of clock, /RD high /RD delay from falling edge of clock, /RD high |
--- --- 15 --- |
85 95 85 85 |
/WR |
tDLF(WR) tDLF(WR) tDHF(WR) tw(/WRL) |
/WR delay from rising edge of clock, /WR low /WR delay from falling edge of clock, /WR low /WR delay from falling edge of clock, /WR high Pulse width, /WR low |
--- --- --- [10]* |
65 80 80 --- |
/M1 |
tDLF(M1) tDHF(M1) |
/M1 delay from rising edge of clock, /M1 low /M1 delay from rising edge of clock, /M1 high |
--- --- |
100 100 |
/RFSH |
tDLF(RF) tDHF(RF) |
/RFSH delay from rising edge of clock, /RFSH low /RFSH delay from rising edge of clock, /RFSH high |
--- --- |
130 120 |
/WAIT | tS(WT) | /WAIT setup time to falling edge of clock | 70 | --- |
/HALT | tD(HT) | /HALT delay time from falling edge of clock | --- | 300 |
/INT | tS(IT) | /INT setup time to rising edge of clock | 80 | --- |
/NMI | tw(NMI) | Pulse width, /NMI low | 80 | --- |
/BUSRQ | tS(BQ) | /BUSRQ setup time to rising edge of clock | 50 | --- |
/BUSAK |
tDL(BA) tDH(BA) |
/BUSAK delay from rising edge of clock, /BUSAK low /BUSAK delay from falling edge of clock, /BUSAK high |
--- --- |
1xx 100 |
/RESET |
tS(RS) tF(C) tmr |
/RESET setup time to rising edge of clock Delay to/from float (/MREQ, /IORQ, /RD, and /WR) /M1 stable prior to /IORQ (interrupt ack.) |
60 --- [11]* |
--- x0 --- |
Timing Reference Table Notes
[1] tacm = tw(FH) + tf - 65 [2] taci = tc - 75 [3] tca = tw(FL) + tr - 50 [4] tcaf = tw(FL) + tr - 45 [5] tdcm = tc - 170 [6] tdci = tw(FL) + tr - 170 [7] tcdf = tw(FL) + tr - 70 [8] tw(/MRL) = tc - 30 [9] tw(/MRH) = tw(FH) + tf - 20 [10] tw(/WRL) = tc - 30 [11] tmr = 2tc + tw(FH) + tf - 65 tc = clock period: 279.36 ns ± 0.01 tw(FH) = clock pulse width, clock High = 120 ns min tw(FL) = clock pulse width, clock Low = 120 ns min tf = clock fall time = 15 ns max tr = clock rise time = 15 ns max
The Memory and I/O Board is connected to the CPU board at J1, with two 30-pin ribbon cables and a dual 30-pin card edge connector.
BD0-BD7 | 8 bidirectional data lines. BD0 is least significant, BD7 is most significant. |
BA0-BA15 | 16 address lines to Memory and I/O Board. BA0 is least significant, BA15 is most significant. |
/BWR | Output of Z80 to Memory and I/O Board; write strobe used to output data during an I/O or memory operation. Indicates a write operation. |
/BRD | Output of Z80 to Memory and I/O Board; read strobe used to clock data into the Z80 during an I/O or memory operation. |
/BMREQ | Output of Z80 to Memory and I/O Board; indicates present read or write operation is directed to memory or memory-mapped devices. |
/IORQ /BIORQ | Same as /BMREQ, but indicates an I/O operation instead of memory or memory-mapped devices. |
/BRFSH | Output of Z80 to Memory and I/O Board; indicates BA0-BA6 contain a row address for the required dynamic memory refresh. (An eighth row address bit is generated by the MIOC, 'RA7'.) |
/RST | Generated by the MIOC as a result of either a game /CVRST or computer /PBRST reset. It connects to and resets the ColecoVision or CPU Board. |
BF | System clock generated on ColecoVision or CPU Boards. Line connects to Memory and I/O Board. |
/WAIT | Used to insert extra clock cycles into Z80 timing during opcode fetch cycles and when accessing slow memory or I/O. Excessive use of /WAIT causes inadequate dynamic RAM refresh. |
/ADDRBUFEN | An active low signal enables the address and control signal buffers between the ColecoVision or CPU Board and the Memory and I/O Board. The control signals are /BRD, /BWR, /BRFSH, /BMREQ, /BM1, and /BIORQ. A high level disables these signals from the Z80, and allows them to go tristate (high-impedance). This occurs during a DMA cycle where another device needs to access memory or devices on the Memory and I/O Board. See /BUSRQ and /BUSAK. |
/245EN | Same as /ADDRBUFEN except /245EN controls the buffer for BD0 through BD7 data lines to CPU or ColecoVision buffer board. |
/BUSRQ (unbuffered) /BUSAK (buffered) | /BUSRQ is generated by the MIOC as the result of a DMA request. The /BUSRQ signal requests that the Z80 relinquish the address and data busses and certain control signals at the end of its current cycle. After receiving the /BUSRQ, the Z80 responds with a /BUSAK signal to indicate it has relinquished the bus. The Z80 remains in an inactive state until the controlling device removes the /BUSRQ signal. The /BUSRQ line connects to the ColecoVision or CPU Board. Generally, only the Master 6801 may assert a /BUSRQ. |
/BM1 | Output of Z80 from CPU or ColecoVision Board; indicates the present memory cycle is an opcode fetch (start of next instruction). |
/CVRST | This signal generates an /RST to the Z80 processor. Also reset are the MIOC and Master 6801. /CVRST initializes the MIOC memory map such that addresses from 0-1FFFH enable the OS-7 ROM; 2000H through 7FFFH enable RAM1; and 8000H through FFFFH enable the game cartridge. |
/AUXDECODE1 | Generated by Memory and I/O Board. Selects or deselects the OS-7 ROM. |
/INT | Active low, this signal is an input to the Z80 and results in a maskable interrupt which directs the Z80 to respond to some external event. |
/SPINDIS | Allows disabling of spinner interrupts by the hand controllers. Active low. |
Audio Out Audio In AUX VID VID GATE CLK, /RSTDIS SEL4, SEL2 /HALT, /NMI /AUXDECODE2 /VIDRST | These signals are not used on the Memory and I/O Board but are made available at the expansion connector. |
BD0-BD7 | 8 bidirectional data lines. BD0 is least significant, BD7 is most significant. |
BA0-BA7 | 8 address lines to Memory and I/O Board. BA0 is least significant, BA7 is most significant. |
/BWR | Output of Z80 to Memory and I/O Board; write strobe used to output data during an I/O or memory operation. Indicates a write operation. |
/BRD | Output of Z80 to Memory and I/O Board; read strobe used to clock data into the Z80 during an I/O or memory operation. |
/IORQ /BIORQ | Same as /BMREQ, but indicates an I/O operation instead of memory or memory-mapped devices. /IORQ is unbuffered; /BIORQ is buffered. |
/BM1 | Output of Z80 from CPU or ColecoVision Board; indicates the present memory cycle is an opcode fetch (start of next instruction). |
/INT | Active low, this signal is an input to the Z80 and results in a maskable interrupt, which directs the Z80 to respond to some external event. |
BD0-BD7 | 8 bidirectional data lines. BD0 is least significant, BD7 is most significant. |
BA0-BA15 | 16 address lines to Memory and I/O Board. BA0 is least significant, BA15 is most significant. |
/BWR | Output of Z80 to Memory and I/O Board; write strobe used to output data during an I/O or memory operation. Indicates a write operation. |
/BRD | Output of Z80 to Memory and I/O Board; read strobe used to clock data into the Z80 during an I/O or memory operation. |
/BMREQ | Output of Z80 to Memory and I/O Board; indicates present read or write operation is directed to memory or memory-mapped devices. |
/IORQ /BIORQ | Same as /BMREQ, but indicates an I/O operation instead of memory or memory-mapped devices. /IORQ is unbuffered; /BIORQ is buffered. |
/BM1 | Output of Z80 from CPU or ColecoVision Board; indicates the present memory cycle is an opcode fetch (start of next instruction). |
/INT | Active low, this signal is an input to the Z80 and results in a maskable interrupt, which directs the Z80 to respond to some external event. |
AUDIO_IN |
BD0-BD7 | 8 bidirectional data lines. BD0 is least significant, BD7 is most significant. |
BA0-BA15 | 16 address lines to Memory and I/O Board. BA0 is least significant, BA15 is most significant. RA7 is substituted for BA7. |
/BWR | Output of Z80 to Memory and I/O Board; write strobe used to output data during an I/O or memory operation. Indicates a write operation. |
/BRD | Output of Z80 to Memory and I/O Board; read strobe used to clock data into the Z80 during an I/O or memory operation. |
J2 and J8 | AdamNet Connections - The following signals are found on the AdamNet connectors for keyboard and expansion devices. | |||||||||
Data - 62.5K bps serial 'bidirectional' line for data transmission reception by network devices | ||||||||||
Reset - hardware network reset | ||||||||||
+5 V | ||||||||||
Signal Ground | ||||||||||
J9 | Power Supply/Printer Connector - In addition to containing the signals found on J2 and J8, the necessary power supply voltages of +12 V logic, +12 V Inductive, and -5 V connect here. | |||||||||
J10 and J12 | Data Drive Connectors - For a detailed description of the signals found on the data drive connectors, refer to Subsection 2.3.5. | |||||||||
J1 | Cartridge Connector | |||||||||
Pin | Type | Pin | Type | Pin | Type | Pin | Type | Pin | Type | |
1 | D2 | 7 | A0 | 13 | RF ground | 19 | A13 | 25 | A7 | |
2 | CS3* | 8 | D5 | 14 | A11 | 20 | A14 | 26 | A9 | |
3 | D1 | 9 | A1 | 15 | A3 | 21 | A5 | 27 | CS4* | |
4 | D3 | 10 | D6 | 16 | A10 | 22 | CS2* | 28 | A8 | |
5 | D0 | 11 | A2 | 17 | A4 | 23 | A6 | |||
6 | D4 | 12 | D7 | 18 | CS1* | 24 | A12 | |||
29 | Digital ground | |||||||||
30 | +5 V Typical available current 0.2 A |
*LS138 Decoder output. Refer to Table 3.
TABLE 3: CARTRIDGE INTERFACE PARAMETERS
Symbol | Parameter | Conditions | Min | Typ | Max | Units | |
---|---|---|---|---|---|---|---|
VOH | High level output voltage | Vcc = Min, VIH = 2 V, VIL = VIL Max, IOH = -400 µA | 2.7 | 3.4 | V | ||
VOL | Low level output voltage | Vcc = Min, VIH = 2 V, VIL = VIL Max | IOL = 8 mA | 0.35 | 0.5 | V | |
IOL = 4 mA | 0.25 | 0.4 | V | ||||
VIH | High level input voltage | 2 | V | ||||
VIL | Low level input voltage | 0.8 | V |
The CPU Board, located in the console of the Adam computer system, consists of six major units: The Z80 Central Processing Unit (CPU), a Video Prcessor, an Audio Generator, the RF Modulator, Clock Generation and the Game Controller Section. The Z80 is the CPU of the entire computer system; all other microprocessors are slaves.
[FIGURE 2-4: CPU BOARD BLOCK DIAGRM]
The Z80 CPU, which consists of a Z80A microprocessor and a clock circuit for synchronization, has control of the Adam computer system. The Z80 configures the memory map and can switch banks of memory. Refer to Chapter 3, Section 2 for details on the memory configuration.
The CPU Board includes an 8K operating system ROM (OS-7) and a connector for up to 32K of cartridge ROM.
The Video Display Processor, A Texas Instruments (TI) 9928, generates all video, control, and synchronization signals and controls the storage, retrieval, and refresh of display data in dynamic memory, VRAM. The 9928 uses a table-driven architecture that allows the programmer to control every pixel in the visual display area, and to define and control 32 "sprites". Sprites may be placed anywhere on the display and moved at will.
The VDP has three major interfaces: CPU, RF modulator, and VRAM. The VDP is addressable in data mode (used when VRAM is being written or read) and register mode (used when control information is being written to and read from one of the VDP's internal registers). The addresses of the ports in the CPU I/O address space are as follows:
Data Port | 0BEH |
Register Port | 0BFH |
The video RAM circuit consists of 8 (16384 x 1) RAM integrated circuits. The contents of VRAM define the TV image. A0, /CSW and /CSR and CPU-controlled input signals to the VDP that control when the data is written to or read from VRAM. The VDP output signals /R/W, /CAS, abd /RAS control the RAM operation.
Data can be transmitted to or from the CPU over the data bus, depending on the state of the Chip Select Write (/CSW) and Chip Select Read (/CSR) control lines. When /CSW is low, data is transmitted from the CPU to the Video Display Processor. When /CSR is low, data is transmitted from the Video Display Processor to the CPU. /CSR and /CSW should not be simultaneously low.
Another control line, address line A0, determines where the VDP retrieves or sends data. If A0 is in a high state, the data is stored into or retrieved from an internal register. The register used is determined by the data. If A0 is in a low state, the data is stored into or retrieved from the VRAM.
Refer to the Texas Instruments TMS9918A/TMS9928A/TMS9929A Video Display Processors Data Manual for further information.
The system uses a TI 76489 (6496) sound generator controller to produce sounds. The chip contains three programmable tone generators, a programmable white-noise generator, and programmable attenuation for each of the channels. The chip is addressed through a single write-only port at location 0FFH. Wait-request hardware has been included in the system because the sound chip is a slow peripheral requiring data lines to be stable for a relatively long time while it is receiving data.
The RF modulator uses the 1889 chip to interface audio, color difference, and luminance signals to the antenna terminals of a TV receiver. It consists of two VHF channels, 3 or 4, selectable by a slide switch with determined LC tank circuits. The chroma subcarrier is derived from the 3.58 MHz system clock to ensure accuracy and stability. The sound oscillator's frequency modulator is achieved by using a 4.5 MHz tank circuit and deviating the center frequency via a varactor diode. Due to the incompatible signal level between the VDP 9928 and the 1889, a DC restoration circuit ensures the DC level of the video signal
The /R-Y, /B-Y, and Y signals from the VDP, along with the 3.58 MHz clock and the audio signal from the SN76489 (6496), are provided to the RF modulator to produce the composite video output.
The two game controllers are connected to the CPU Board via two "D" type connectors. Each controller is accessed by the system through its own port. See CONT_SCAN in the OS-7 Source Code listing for details.
For each controller, 18 switches are read on a single 8-bit port. Therefore, once a port has been read, some decoding is required to determine which switches have been depressed.
Two spinner switches that are not wired in the controller are used in some games. To ensure that the spinner switch closures are processed as soon as they happen, they are connected to the CPU maskable interrupt, and the cartridge software determines which switch caused the interrupt.
Controller Connector Pin Out
Pin | Type | Comments |
---|---|---|
1 | Indirect D0 input | Refer to Table 1 |
2 | Indirect D2 input | Refer to Table 1 |
3 | Indirect D3 input | Refer to Table 1 |
4 | Indirect D1 input | Refer to Table 1 |
5 | Strobe signal output, Common 1 | |
6 | Indirect D6 input | Refer to Table 1 |
7 | Indirect D5 input | Refer to Table 1 |
8 | Strobe signal output, Common 0 | |
9 | Indirect /INT input |
Strobe signal: typical 350 µsec pulse width, -0.7 V low, +2.8 V high typical.
For further information on the game controllers, refer to Chapter 2, Section 5.
The system clock is a 3.58 MHz square wave generated by dividing the 7.12 MHz clock by two. The video chip clock (10.7 MHz) drives the Video Display Processor. The video chip clock is obtained from the third multiple, high-Q tuned tank circuit on the 3.58 MHz system clock. The 7.1 MHz clock is generated by a crystal-controlled oscillator. The output of the oscillator circit is buffered and divided by two to provide a 50% duty cycle wave form.
The CPU/Game Board and the Memory and I/O Board connect via two 30-pin ribbon cables and a dual 30-pin card edge connector, making a pin-for-pin connection between J1 on the Memory and I/O Board and J2 on the CPU Board. Refer to Subsection 2.1.9.
The data drive assembly provides for two drives: one is included with the system, the other is optional. The data drive is a computer-controlled, digital cassette drive.
The components of the data drive subsystem are located in two places: The Memory and I/O Board contains the tape drive 6801 microcomputer, a quad comparator, and RAM. The Read/Write and Servo Boards are located in the data drive assembly.
The data drive 6801 controls the direction of the tape, tape speed, stop, track selection, and the Read/Write operation. In addition, the data drive 6801 monitors the presence of a data pack and transmits and receives data through AdamNet.
The comparator interfaces the data drive 6801 to AdamNet. The RAM circuitry consists of two 1024 x 4 RAM integrated circuits, connected in parallel to provide an 8-bit data bus.
Two printed circuit boards, the Servo Board and the Read/Write board, are located in the data drive assembly.
The Servo Board controls the direction and speed of the data drive by:
Controlling the "take-up" motor which pulls tape in the direction of motion (forward or reverse).
Controlling the "supply" motor which applies a slight pull or drag in the direction opposite to tape motion. This function maintains a stable tape motion.
Maintaining a constant tape velocity across the head at any position, from the beginning to the end of the tape.
Providing two different tape speeds: 20 inches per second (slow) and 80 inches per second (fast). Tape speed is controlled by the data drive 6801.
Providing a brake function that allows the data drive 6801 to stop tape motion in milliseconds. (This function prevents the tape from coasting to a stop.)
Keeping the tape in tension when the tape is not in motion, preventing slack in the tape.
Providing a signal to the data drive 6801 indicating the status of tape motion.
Providing a signal to the data drive 6801 indicating whether or not a data pack has been properly placed in the data drive.
The Read/Write Board records digital data enclosed in bi-phase mark format on two separate tracks on the tape. This board also plays back the data recorded on the two tracks, with data output in the same format as recorded. The data drive 6801 selects the tracks.
The bi-phase marke technique embeds the clock in the data line. When data is returned from the data drive to the data drive 6801, the data line is coded back to the standard binary format.
A "cassette-in-place" switch located on the data drive chassis lets the Servo Board know when the data pack is in place and ready for use. An optical encoding wheel interacts with the Servo Board and the tape for drive speed control.
The magnetic tape in the data pack is standard two-track digital recording tape, 300 feet in length by 0.15 inches in width.
Effective data transfer rate | 1.4K bytes per second |
Tape speed: Normal | 20 inches per second |
Tape speed: Fast forward/rewind | 80 inches per second |
Tape capacity | Two tracks, 128 blocks per track, 1 block = 1K |
Signal Name | Mem/I/O Board | R/W I/O | Description |
---|---|---|---|
BRAKE* (input) | J10-1 | E26 | Brakes tape motion. Logic 1 (active high) applies brake. This signal is passed from the Read/Write (R/W) Board to the Servo Board at point E6. |
/GO_REV (input) | J10-2 | E25 | Commands reverse direction of tape motion when at Logic 0 (active low). This signal is passed from R/W Board to Servo Board at point Exx. |
/GO_FWD (input) | J10-3 | E27 | Commands forward direction of tape motion when at Logic 0 (active low). This signal is passed from R/W Board to Servo Board at point Exx. |
STOP (input) | J10-4 | E28 | Prevents tape motion and latches data drive output to Logic 1 when at Logic 1 (active high). Enables data drive output and tape motion when at Logic 0. This signal is used in circuits on both boards. It is passed from R/W board to Servo Board at point E9. |
SPEED_SELECT (input) | J10-5 | E29 | Selects speed of tape motion: Logic 0 = 20 ips (slow speed), Logic 1 = 80 ips (fast speed). This signal is passed from R/W Board to Servo Board at point E10. |
GND | J10-6 | E30 | Return path for all logic and analog signals. Connected from R/W Bord to Servo Board at point E19. |
MSENSE (output) | J10-7 | E31 | Provides sense of tape motion status for tape drive 6801 (active high). When Logic 1, tape is properly in motion. When Logic 0, tape is not moving due to stop/braking action or malfunction. This signal is passed between R/W Board and Servo Board as point Exx. |
+12VI (input) | J10-8 | E32 | +12 V Inductive Power Supply line, used to power motor circuitry. Passed from R/W to Servo circuit at point Exx. |
/CIP (output) | J10-9 | E33 | Indicates to tape drive 6801 that a data pack has been properly inserted in drive when Logic 0 (active low). Passed between R/W and Servo Boards at point E14. |
DATA_IN (input) | J11-1 | E17 | Data input to drive from tape drive 6801. Data is encoded in bi-phase mark format. Each bit cell is 70 µsec in duration. A logic 1 is denoted by a flux change in the bit cell. A logic 0 is denoted by no flux change in the bit cell. This data is input to the drive in a serial stream. |
TRACK_A//B (input) | J11-2 | E18 | Selects recording track for read or write operation. Logic 1 selects track A; Logic 0 selects Track B. |
GND | J11-3 | E19 | Return path for all analog and logic signals. |
+5V (input) | J11-4 | E20 | +5 V is passed to Servo Board at point E3. |
DATA_OUT (output) | J11-5 | E21 | Data output from drive to tape drive 6801. Data is encoded in bi-phase mark format as described in DATA_IN signal. Jitter in signal is specified at 4% maximum, peak shift at 5% maximum. |
+12VL (input) | J11-6 | E22 | +12 V is passed from R/W to Servo Board at point E15. |
/WRENABLE (input) | J11-7 | E23 | Selects write mode (Logic 0) or read mode (Logic 1) or R/W circuit operation (active low). |
- | J11-8 | E24 | No connection |
Expansion Module #3 is designed for the consumer who owns ColecoVision. It consists of the Memory Console, the keyboard, the printer, and various cords and cables to connect the components. The Memory Console attaches to the ColecoVision Console. The consumer provides his own TV. The major difference between Expansion Module #3 and the complete Adam Home Computer System is in the Memory Console. The equivalent of the CPU Board is housed in the ColecoVision Console, not in the Memory Console. Expansion Module #3 does not provide composite video output; therefore, a monitor cannot be used.
Expansion Module #3 is not packaged with "joystick" game controllers or the antenna switch box, since these items come with ColecoVision.
The ColecoVision Board and the Memory and I/O Board connect via two 30-pin ribbon cables, a dual 30-pin card edge connector, and the Interconnect Board, making a connection between J1 on the Memory and I/O Board and the expansion port of the ColecoVision console. Many of the connections are made pin-for-pin. The exceptions are:
A0-A15 | These lines are buffered. The input to the buffer is from the ColecoVision, and the tristate control of the buffer (/ADDRBUFEN) is from the Memory and I/O Board. |
D0-D7 | These lines are buffered bidirectionally. The /RD signal from the ColecoVision controls the direction (when active, data flows toward the ColecoVision) and the /245EN signal controls the tristate function. |
/IORQ | This line is connected directly between the two boards (pin 55) and is also buffered (controlled by /ADDRBUFEN) and connected to pin 40 of the Memory and I/O Board. |
F´ CLOCK | This line, pin 40 of the ColecoVision Board, is connected to pin 45 of the Memory and I/O Board. |
F CLOCK | This line, pin 45 of the ColecoVision, is not connected. |
/M1, /MREQ, /RFSH, /WR, /RD | These lines are buffered. The input to the buffer is from the ColecoVision, and the tristate control of the buffer (/ADDRBUFEN) is from the Memory and I/O Board. |
The keyboard is the major input device through which the user communicates with the system. The game controller joystick, buttons, and keypad can also be used to input information. The keyboard consists of two major subsystems. The external subsystem is an array of keys much like that of a mechanical typewriter. The internal subsystem, located on the Keyboard Printed Circuit Board, includes the keyboard 6801 microcomputer and the AdamNet serial interface.
The keyboard contains 75 full-travel keys, including special function keys. Some special function keys are labelled on the key top., for example, STORE/GET, DELETE, BACKSPACE. The function keys on the top row of the keyboard are Smart Keys, marked I through VI. Corresponding Smart Key labels shown on the video display identify their functions.
The keyboard 6801 determines which keys the user presses through the keyboard matrix. Every 5 or 8 milliseconds, the keyboard 6801 scans the matrix and stores the characters in a buffer.
The matrix consists of vertical columns which correspond to keyboard 6801 output lines, and horizontal rows which correspond to keyboard 6801 input lines.
A debounce function determines if any of the keys registers a low signal; then that row is read horizontally. More than one row in a column is read if more than one key in that column is depressed. The ASCII code for the depressed key or keys is read back to the 6801. The keyboard 6801 compares the code with the code input from the previous scan. If it is the same, the information is recorded; if it is different, the information is not recorded.
The keyboard 6801 responds to the following commands from the Master 6801:
Reset - the keyboard 6801 erases the character buffer and resets shift lock to the unlocked state.
Send character - the keyboard 6801 sends one character bia the RxD/TxD line to the Master 6801.
The lines linking the keyboard 6801 to AdamNet are:
Signal ground
+5 V (input)
Reset (input)
RxD/TxD (input/output)
The printer houses two printed circuit boards: the Printer Board and the Linear Power Supply Board. The Printer Board includes a 6801 microcomputer and parallel drivers that control the printer's electro-mechanical devices. The electro-mechanical devices include the daisy wheel motor, the carriage motor, the platen advance mechanism, the print solenoid, and the ribbon solenoid. The Linear Power Supply Board includes regulators, rectifiers, and a transformer. For more information on the power supply, refer to Chapter 2, Section 6.
The printer 6801 communicates with the Master 6801 on the Memory and I/O Board via AdamNet to receive data to be printed, controls the motions of the printer's mechanical parts, and ensures that the printer performs the optimum number of motions simultaneously.
Within the printer 6801 RAM is a 16-character buffer for data being sent to the printer over AdamNet. The buffer ensures that time is not lost between characters being printed, and maximizes printing speed.
The printer 6801 responds to some ASCII control codes, including carriage return, line feed, backspace, escape, shift-out, and shift-in. Shift-out causes the printer 6801 to reverse its left and right directions, allowing printing from right to left.
The printer 6801 controls the printer's electro-mechanical devices. It also ensures that lateral carriage motion, rotation of the daisy wheel, and stepping of the platen can be activated simultaneously.
The lines linking the printer 6801 to AdamNet are:
Signal ground
+5 V (input)
Reset (input)
RxD/TxD (input/output)
The game controller contains an 8-position joystick, two push buttons, and a 12-key keypad. The information from a controller is read by the CPU on eight input lines through a single port. Once a port has been read, the input data must be decoded. See CONT_SCAN in the OS-7 Source Code Listing for details.
[FIGURE 2-5: CONTROLLER CONFIGURATION]
The power supply for the ADAM computer is located in the printer. The power supply converts the incoming line voltage (AC) to one +18 V unregulated voltage that powers the ribbon solenoid, and fours low-level, regulated DC voltages as follows:
+5V | Main source of power to the CPU. |
-5V | Supplies power to the CPU. |
+12VI | Supplies power to drive the inductive loads such as carriage motor, daisy wheel motor, print solenoid, platen motor, and digital data drive |
+12VL | Supplies power to the system logic. |
The power supply uses a variety of methods to protect against excessive current output.
The +5 V and the +12VI are fused and use electronic foldback current limiting.
The +12VL is not fused but uses electronic foldback current limiting.
The -5V uses conventional current limiting and thermal protection which halts the current when the regulator gets too hot.
The +18V unregulated uses the same fuse as the +12VI.
A thermal fuse in the power transformer protects against overcurrent at the transformer.
The AC line may vary from 180 VAC to 132 VAC. The power supply ensures a constant and quiet source of DC power.
The printer/console interface cable consists of 7 insulated wires and one uninsulated drain wire.
Pin | Color | Voltage/Description | |
---|---|---|---|
1 | Brown | +12L VDC | + 0.508 V - 0.6 V |
2 | Red | +12I VDC | + 0.497 V - 0.6 V |
3 | Orange | +5.075 VDC | + 0.079 V - 0.255 V |
4 | Yellow | -5.15 VDC | + 0.25 V |
5 | Green | Ground | |
6 | Blue | AdamNet | |
7 | Violet | Reset | |
8 | -- | Drain | |
9 | -- | No wire |
Voltage | Full Load Current |
---|---|
+5V | 2.75 A |
-5V | 0.2 A |
+12VI | 0.6 A |
+12VL | 0.3 A |
Voltage | Full Load Current |
---|---|
+5VL | 0.25 A |
+12VI | 1.95 A |
+18V (unreg) | 1.0 A |
This chapter presents technical information on each of ADAM's software components.
Adam's Z80 microprocessor can address 64K bytes at any one time. The 64K addressable memory space is divided into two 32K sections. Each section may contain one of cour memory options. Any one option for lower memory and any one option for upper memory can be selected for the full 64K memory space via port 7FH.
Memory Options for 0 - 7FFFH (lower memory)
SmartWriter Word Processor ROM | 32K Intrinsic RAM | 32K Expansion RAM | OS-7 ROM |
24K Intrinsic RAM |
Memory Options for 8000H - FFFFH (upper memory)
32K Intrinsic RAM | 32K Expansion ROM | 32K Expansion RAM | 32K Cartridge ROM |
SmartWRITER Word Processor ROM - This memory option consists of 32K of SmartWRITER ROM code. A small part of this code, EOS_BOOT, is responsible for system initialization during power up and reset. EOS ROM can also be accessed when this option is selected. See Subsection 4.1, EOS, for further details.
32K Intrinsic RAM - This option is the lower half of the 64K RAM included with every ADAM. DMA transfers to AdamNet can take place only in intrinsic RAM. SmartBASIC and most Programs stored on data pack reside in this memory.
32K Expansion RAM - This option is the lower half of the 64K Memory Expander, an optional feature not included with the ADAM system. The 64K Memory Expander increases ADAM's memory to 144K of read/write memory (64K intrinsic, 64K expansion, 16K VRAM).
OS-7 and 24K Intrinsic RAM - This option contains OS-7 and 24K of ADAM's intrinsic RAM. OS-7 is the 8K ROM installed in ColecoVision and ADAM. In Expansion Module #3, this ROM is in the ColecoVision. The description of the 32K Intrinsic RAM also applies to this 24K intrinsic RAM.
32K Intrinsic RAM - This option is the upper half of the 64K intrinsic RAM included with ADAM. DMA transfers to AdamNet can take place only in intrinsic RAM. SmartBASIC and most programs stored on data pack reside in this memory.
Expansion ROM - This memory is provided by an expansion ROM, an optional feature not included in the ADAM system. The expansion ROM is installed in Connextor #2 on the Memory and I/O Board. EOS_BOOT checks this connector for valid data before initializing EOS. If valid data is found, the EOS_BOOT code jumps to this ROM.
32K Expansion RAM - This is the upper half of the optional Expansion RAM described for lower memory.
32K Cartridge ROM - This memory option is the cartridge slot on ADAM or ColecoVision, used to execute game cartridges or other cartridge-based software.
When Adam powers up or when the computer reset switch is pressed, the MIOC selects SmartWRITER in lower memory and Intrinsic RAM in upper memory. EOS_BOOT executes this procedure:
Check for Expansion ROM. If Expansion ROM exists, jump to Expansion ROM.
Else, initialize EOS and jump to EOS_START.
Check for the presence of devices in this order:
Disk Drive 1
Disk Drive 2
Data Pack Drive 1
Data Pack Drive 2
If a device exists, check for valid data in the device.
Boot and execute code from the first valid device found by loading block 0 to address 0C800H, then jumping to 0C800H.
If no valid data is found on any device, execute SmartWRITER.
Port | Description |
---|---|
00H through 1DH | Reserved |
1EH | Optional Auto Dialer |
1FH | Reserved |
20H through 3EH | Reserved |
3FH* | Network reset; EOS enable |
40H through 4EH | Reserved |
4FH | Expansion Connector #2 |
50H through 5DH | Reserved |
5EH | Optional Modem Data I/O |
5FH | Optional Modem Control Status |
60H through 7EH | Reserved |
7FH | Memory Map Control |
80H through FFH | Reserved for ColecoVision use |
*Net reset - The net reset function is performed by setting bit 0 and then resetting bit 0.
*EOS enable - setting bit 1 enables the EOS ROM. Resetting bit 1 disables EOS ROM. The EOS enable function affects only the SmartWRITER ROMs. To access the EOS ROM, the SmartWRITER ROMs must be selected.
For further details on port assignments, see PORT_COLLECTION in the EOS Source Code Listing.
Software can select the memory configuration by writing to Port 7FH. Data bits D0 and D1 selecte the lower (0 - 7FFFH) memory option. D2 and D3 select the upper (8000H - FFFFH) memory option. D4 through D7 are reserved for future expansion, and should remain as 0. The value to be written to Port 7FH is obtained from the following tables.
Lower Memory Option Selection
D1 | D0 | Description |
---|---|---|
0 | 0 | SmartWRITER ROM and EOS ROM |
0 | 1 | 32K Intrinsic RAM |
1 | 0 | 32K Expansion RAM |
1 | 1 | OS-7 + 24K Intrinsic RAM |
Upper Memory Option Selection
D3 | D2 | Description |
---|---|---|
0 | 0 | 32K Intrinsic RAM |
0 | 1 | Expansion ROM |
1 | 0 | 32K Expansion RAM |
1 | 0 | Cartridge ROM |
Adam can be reset in either computer mode or in game mode. When the computer reset switch is pressed, Adam resets to computer mode, according to the power up procedure described in Subsection 2.3.
When the cartridge (or ColecoVision) reset switch is pressed, Adam resets to game mode. 32K of Cartridge ROM are switched into upper memory. OS-7 plus 24K of intrinsic RAM are switched into the lower bank of memory.
AdamNet is based physically on a shared bus, single master topology, although logically it resembles a token-passing network. The physical design of the network is depicted in Figure 3-1.
The circles represent nodes (for example, printers or keyboards), which connect to a shared bus, represented by the horizontal line. The network is a four-wire bus. The wire definitions are:
Data
Reset
Signal ground
Power
The network resides in all Adam components. The reset line behaves as a master reset signal to every node attached to the network. A transition on this line causes all attached devices to enter the power-on state, allowing the master to bring sanity to the network during periods of erratic behavior.
Logically, AdamNet resembles a token-passing network. In a token-passing network, the right to talk on the bus is passed from node to node. This right, or "token", allows the node to access the bus and send messages. One node functions as the master of the bus. The master gives the token to other nodes with a regulated frequency.
This section provides information to allow designers to write programs that operate in a Adam/EOS environment. It describes the organization of the Elementary Operating System (EOS), including file management and executive calls.
The Elementary Operating System is a collection of service routines that provide input/output facilities to peripheral devices. Programs accessing these devices need not be conceened with the physical characteristics of the devices, because EOS logically resides between the physical devices and application programs. EOS shields application programs from the details of AdamNet.
FIGURE 3-4: EOS MEMORY MAP
FILE CONTROL BLOCK HEADERS | D390H |
FCB BUFFERS (3 x 1KB) | D400H |
EOS CODE | E000H |
ADAMNET DEVICE DRIVERS | F400H |
EOS DATA TABLES | FBFFH |
EOS JUMP TABLES | FC30H |
GLOBAL RAM AREA | FD50H |
PROCESSOR CONTROL BLOCK | FEC0H |
DEVICE CONTROL BLOCK | FEC4H |
DMA RESERVED BYTE | FFFFH |
Some applications may not require all of the routines provided by EOS. To accommodate this situation, EOS has three defined starting locations. Applications should always access the routines from the defined jump table locations.
Location 0D390H is the lowest EOS starting address. File manager software is loaded in this part of EOS. If the application program uses file manager software, the application should not overwrite 0D390H or above.
Location 0E000H. If the application does not use the file manager software, it can overwrite EOS up to 0DFFFH. Routines that access the lower level network device drivers, and the device drivers for the VDP, controllers, and sound generator are available.
Locations 0F400H to 0FC30H contain the lowest level device drivers for AdamNet. The application can extend up to 0F3FFH if it is using OS-7 or its own drivers for the VDP, controllers, and sound generator.
The file structure takes advantage of the sequential design of the data pack. (For more information on tapes and tape formats, see Chapter 3, Section 5.) A file directory keeps track of the location of files on tape, and other pertinent information such as size, creation date, and protection attributes. Some programs, such as Super Games, do not require directories.
Data is stored on tape in blocks of 1K (1024 bytes). An EOS file occupies a number of contiguous blocks, allocated upon file creation. EOS files can be any number of blocks, but are limited by the physical storage space available.
Block 0 is reserved for a cold start loader. Block 1 and up, depending on the directory size, contain the directory.
The EOS file manager accesses and controls a file through a File Control Block (FCB) maintained in RAM. The FCB contains static and dynamic information about the file. THe FCB is created when a file is opened and destroyed when the file is closed. Application programs are limited to two FCBs at any one time. Each FCB is 36 bytes long. A data buffer, 1024 bytes long, is associated with each FCB.
There are two types of tape format for ADAM data packs. Type GW tapes have block 0 at the end. Type HE tapes have block 0 in the middle. An example of a type GW is the Buck RogersTM Planet of ZoomTM Super Game. Both SmartBASIC and the blank data pack are examples of type HE tapes.
The capacity of the tape is 256K. Blocks are defined as 1K in length. There are two tracks, 128 blocks per track. Block numbers refer to the block of data on a data pack referenced by application software. The following illustration shows physical block positions.
FORMAT GW (Block 0 at the end)<---- tape motion 0 40 7F block no. =========================================== track 0 =========================================== track 1 80 C0 FF block no.FORMAT HE (Block 0 in the middle)<---- tape motion 40 7F 0 3F block no. =========================================== track 0 =========================================== track 1 80 BF C0 FF block no.
Type GW tapes do not contain a directory. Type GW tapes cannot be readily copied, so users are not able to easily copy one GW tape to another GW tape.
Type HE tapes are compatible with other type HE tapes. If a program needs to store information on a separate data pack, access or be accessed by other software, then a type HE tape is suggested.
EOS_BOOT | 0 | INT. VECTORS | 0 | ||
100H | HI_AUX_ACCESS_ ROUTINES | 100H | |||
HI_AUX_DATA_ BUFFER | 400H | ||||
ROM 32K | WORD PROCESSOR PROGRAM | 7FFFH | Low Intrinsic RAM 32K | TEXT | 800H 7FFFH |
WP RAM | 8000H | 8000H | |||
CURRENT_WINDOW | 8488H | ||||
WP RAM | 9108H | ||||
UNDO_WINDOW | 919AH | ||||
WP RAM | 9E1AH | ||||
High Intrinsic | LOW_STACK | 9E2AH | High Expans. | ||
RAM 32K | HIGH_STACK | A26AH | RAM 32K | ||
PUT/FETCH LOW (AUX) MEM | A6AAH | ||||
WORD PROCESSOR RAM | A7C9H D38FH | ||||
EOS | D390H FFFFH | FFFFH |
Files must meet certain criteria to be compatible with SmartWRITER. SmartWRITER files have the user file attribute bit set, and the last character of the file name is H. SmartWRITER files start with a header, and ASCII information begins after the header. The first two bytes of the file define the length of the header. The third byte contains the application code (1 for SmartWRITER). The format of the header is determined by the application code. Backup versions of SmartWRITER files have a lower-case "h" as the file type.
An example of a SmartWRITER file follows:
Byte | Description |
---|---|
0 | HEADER_SIZE_LOW (=0) |
1 | HEADER_SIZE_HIGH (=1) |
2 | FILE_TYPE_CODE (=1) |
3 | TOP_MARGIN |
4 | BOTTOM_MARGIN |
5 | LEFT_MARGIN |
6 | RIGHT_MARGIN |
7 | LINE_SPACING |
8 | TAB_ARRAY(1) [0 = NO MRG, 1 = MRG] |
89 | TAB_ARRAY(80) [0 = NO MRG, 1 = MRG] |
90 | UNUSED |
258 | UNUSED |
259 | FIRST ASCII DATA BYTE |
n | ASCII DATA |
SmartBASIC is generally source-code compatible with Applesoft BASIC. PEEKs and POKEs, and other machine-dependent features of Applesoft BASIC, are different in SmartBASIC. SmartBASIC graphics feature four modes:
Text mode - 24 lines of 32 characters
Low resolution graphics - 40 x 40, with four lines of text
High-resolution graphics - 256 x 160, with four lines of text
Pure high-resolution graphics - 256 x 192
This section explains background loading, tape mapping, and playability of Super Games and other programs that use OS-7. Familiarity with OS-7 is assumed. The information and examples in this section should help programmers who are accustomed to cartridge software adapt to tape-based software more easily.
The background loading software (see Subsection 1.7) is designed to load overlays from data pack to RAM while the program is executing. Care must be taken that data being loaded during execution does not destroy data that is controlling execution. A good approach is to use two buffers. One buffer is loaded while the other is controlling program execution.
Each background block read takes about one second, assuming no retries and no repositioning. Retries take about 1.2 to 1.4 seconds and happen only if the checksum fails to compare on read. There are a maximum of three attempts to read a block on the tape, then the checksum failed code is sent. Repositioning takes as long as one second to find the current position on tape (approximately one second for every 80 inches of tape travel). Repositioning is automatically handled by the drive. For the NMI-driven tape manager, additional overhead in transfer time averages 8 msec (one-half of a 60 Hz clock tick). Buffering data for transfer to VDP RAM results in Z80 CPU usage, assuming use of WRITE_VRAM. The following table shows the Z80 CPU time used in VDP RAM writes.
TABLE 4: Z80 CPU TIME FOR VDP RAM WRITES
Number of bytes to transfer | Time (msec) |
---|---|
1 | 0.077 |
10 | 0.175 |
100 | 1.16 |
1000 | 11.25 |
2000 | 22.4 |
4000 | 44.8 |
8000 | 89.6 |
The programmer must lay out the data to minimize load time, through mapping. Minimizing load time is the most crucial aspect of designing Super Games.
Since the data on tape is a memory image, it may be read directly into Z80 RAM and immediately executed. The programmer should diagram the tape blocks on a time line, following the timing considerations in Subsection 1.2. Some action on the screen must hide the loading process. Rewinding and positioning time must be included in calculating load size and load time.
An example of a time line diagram follows. It shows the screen actions and what is loaded in background while the action is taking place.
FIGURE 5-1: TIME LINE DIAGRAM
Time in Seconds | Screen | Loading | Address | Block Number |
---|---|---|---|---|
0 1 2 3 | BLANK | COLD START MAIN |
C800H 8000H 8400H 8800H |
0 1 2 3 |
4 5 6 7 | TITLE SCREEN | OVERLAY 3 |
8C00H 9000H 9400H 9800H |
4 5 6 7 |
8 9 10 11 | LOGO SCREEN |
9C00H A000H A400H A800H |
8 9 10 11 | |
12 13 14 15 | SELECT OPTIONS |
AC00H B000H B400H B800H |
12 13 14 15 | |
16 17 18 19 | GAME START | [rewind to Track 1 Sector 1; 5 seconds of rewind time follow] | BC00H |
16 128 |
20 21 22 23 |
OVERLAY 4 |
C000H C400H |
129 130 | |
24 25 | ETC... |
C800H CC00H |
131 132 |
To read memory images into RAM, three pieces of information are required. They are:
Start of memory buffer or transfer address (2 bytes)
Start of memory image on tape or block number (2 bytes)
Number of 1K blocks in the memory image (1 byte)
This information is organized into a 5-byte block called an Overlay Control Block (OCB). The Overlay Control Blocks are organized into an Overlay Control Table (OCT). The OCT controls the loading of data from tape using the tape interface software described in Subsection 1.6. The table should be pointed to by a two-byte pointer and it should be terminated by a byte set to FFH. The Overlay Control Table should be loaded immediately after the cold start loader.
EOS loads Block 0 (the cold start loader) to C800H and passes control to it. The cold start loader then initializes the system and loads enough of the main program to allow some user interaction to begin. The following rules define the interface to the cold start loader.
The main program is loaded to location 8000H.
Immediately following the ColecoVision OS vectors at 8000H, and the game name, is a pointer to the OCT. The first entry in the OCT describes the main program.
Control is passed to the main program by the vector at address 800AH as defined in the OS-7 PRIME.
The main program must contain the OCT in the first 1K block.
The main program must contain the background loading routines described in Subsection 1.7. They are required to reside in the first 3K.
The main program must immediately display graphics or allow some user interaction.
Once control is passed to the main program, game play must start as soon as possible.
When control is transferred to the main program, Register B contains the boot device ID. Register B should be stored at the globally-defined address DEVICE_ID.
Subsection 1.5 is an example of the 8000H area code which interfaces to the cold start loader. Compare this to the area defined in OS-7.
Z80 source: 8000H.ASM
Assembly listing: 8000H.LST
The tape interface software loads RAM from tape in background using the OCT structure defined in Subsection 1.7. The entry points for these modules are described in the following subsections. The tape manager programs are interrupt-driven and should be called on every clock cycle (60 Hz) to drive background loading. The OCT, DDP_MANAGER (Subsection 1.10) and TAPE_INTERFACE (Subsection 1.9) or DDP_INTERFACE (Subsection 1.11) must be linked into the program.
The tape manager consists of two interchangeable parts dependent upon environment.
TAPE_MANAGER
The program TAPE_MANAGER (shown in Subsection 1.8) is designed for use on the HP64000. This program allows for simulated tape I/O via the HP disk, and should be used in conjunction with TAPE_INTERFACE.
DDP_MANAGER
This program, shown in Subsection 1.10, replaces the tape manager in working games. Entry points and interface are identical to the TAPE_MANAGER except that this module uses EOS calls to manipulate the tape. DDP_MANAGER should be used in conjunction with DDP_INTERFACE.
The final version of the game should have the DDP_MANAGER installed. The tape managers are fully interchangeable.
TAPE_INTERFACE consists of a set of entry points and data passed in the accumulator. DDP_INTERFACE is similar to TAPE_INTERFACE, except that some labels are different.
Entry Points | Accumulator | Comments | ||
---|---|---|---|---|
LOAD_OVERLAY | OVERLAY_NUMBER | The code uses the overlay number to look up OCT information. The overlay is loaded from tape to Z80 RAM. | ||
WRITE_OVERLAY | OVERLAY_NUMBER | As in LOAD_OVERLAY, but data flow is from RAM to tape. | ||
ABORT_TAPE | -------- | Aborts all tape functions. Resets tape. Makes tape ready to immediately receive new commands. Does not reposition tape. | ||
TEST_TAPE | -------- | Returns status of tape. |
Status from TEST_TAPE may show the following conditions:
0 | OK |
1 | Checksum failed |
2 | Block not found |
3 | Tape not present |
4 | Device not present |
The checksum shows that after three retries, the tape block was not read correctly and the data transferred by the read command is not valid.
Z80 source: OCB.ASM
Assembly listing: OCB.LST
Z80 source: TAPE_MAN.ASM
Assembly listing: TAPE_MAN.LST
Z80 source: TAPE_INT.ASM
Assembly listing: TAPE_INT.LST
Z80 source: DDP_MAN.ASM, P_DCB_EQ.ASM, and EOS_ERRS.ASM
Assembly listing: DDP_MAN.LST
Z80 source: DDP_INT.ASM
Assembly listing: DDP_INT.LST
ADAM hardware characteristics affect the selection and interface of an emulator for ADAM.
ADAM has dynamic RAMs that must be refreshed to maintain integrity. The RAMs require an 8-bit refresh. Since the Z80 performs a 7-bit refresh, the eighth bit is manufactured by the MIOC, using other signals from the Z80. In general, the signals are:
/MREQ
M1
/WAIT
REFRESH (RA0-RA6)
A7
The master 6801 performs a direct memory access into the 64K intrinsic RAM addressed by the Z80. The MIOC is responsible for the setup and execution of DMA by the Master 6801.
Some emulators place a load on the clock circuit that drives the Z80. Problems with an interface to an emulator my require a check of the clock and a modification to R60 on the CPU Board.
Due to the hardware configuration of ADAM, certain routines which write to VRAM, (e.g., WRITE_VRAM (OS-7)), could have unpredictable results if they are interrupted during execution by an NMI and the VRAM is accessed by the interrupt handling routine.
One possible solution to this problem is a defer interrupt routine. The function of this routine is to hold off (defer) the servicing of the interrupt until the current VDP access routine is finished.
The reason for a defer interrupt routine is to prevent the VDP's internal auto-incrementing address counter from being re-adjusted by an interrupt routine that also wants to access the VDP.
Interrupt deferral is not necessary if the VDP is not accessed by the interrupt handling routine.
The NMIs are vectored automatically to 66H by the Z80. If the NMI generated by the VDP occurs when there is no handling routine set up at 66Hm the computer will lose control. Be sure to turn off the VDP interrupt output before doing a memory bank switch to lower expansion RAM if no routine has been set up previously in the expansion RAM to handle the NMI.
If OS-7 is bank-switched in, the NMI service is directed to location 8021H, where there must be a routine to maintain program control if the NMI is active.
4. Schematics and Component Location/Identification DrawingsThe ADAM disk can be formatted by using the Disk Manager software included with every production disk drive. The ADAM disk format is single sided, double density.
The Digital Data Pack tape can't be formatted by the user.
After pressing the computer reset, if block 00H can be accessed and loaded to C800H from one of the drives, register B of the Z80 and memory location DEFAULT_BT_DEV will contain the boot device number before program control is directed to C800H.
The following source code listing is the low level drivers used for the AdamLink MODEM. This is all the information necessary to interface with the AdamLink MODEM.
Z80 source: MODDOC.ASM
Assembly listing: MODDOC.LST
Z80 source: MODDOC2.ASM
Assembly listing: MODDOC2.LST
Original Coleco Z80 source: EOS6.ASM
Rich Drushel's disassembly source from the EOS-5 ROM: EOS52.ASM